/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.senaclem.aspera.vista;

import co.edu.senaclem.logica.CoordinadorLogicaLocal;
import co.edu.senaclem.logica.InstructorLogicaLocal;
import co.edu.senaclem.logica.PermisoLogicaLocal;
import co.edu.senaclem.logica.UsuariosLogicaLocal;
import co.edu.senaclem.modelo.Coordinador;
import co.edu.senaclem.modelo.Instructor;
import co.edu.senaclem.modelo.Permiso;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author FELIPE
 */
@ManagedBean(name = "apruebaPermisoVista")
@RequestScoped
public class ApruebaPermisoVista {

    @EJB
    private PermisoLogicaLocal permisosLogica;
    @EJB
    private UsuariosLogicaLocal usuariosLogica;
    @EJB
    private InstructorLogicaLocal instructorLogica;
    @EJB
    private CoordinadorLogicaLocal coordinadorLogica;
    private List<Permiso> listaPermisos = null;
    private List<Permiso> listaPermisosIns = null;
    private Permiso selectedPermiso;
    private Date fechaSistema;
    private InputText txtCodigo;
    private InputText txtDocumento;
    private InputText txtNombre;
    private CommandButton btnLimpiar;
    private CommandButton btnModificar;

    public InputText getTxtCodigo() {
        return txtCodigo;
    }

    public void setTxtCodigo(InputText txtCodigo) {
        this.txtCodigo = txtCodigo;
    }

    public InputText getTxtDocumento() {
        return txtDocumento;
    }

    public void setTxtDocumento(InputText txtDocumento) {
        this.txtDocumento = txtDocumento;
    }

    public InputText getTxtNombre() {
        return txtNombre;
    }

    public void setTxtNombre(InputText txtNombre) {
        this.txtNombre = txtNombre;
    }

    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    public CommandButton getBtnModificar() {
        return btnModificar;
    }

    public void setBtnModificar(CommandButton btnModificar) {
        this.btnModificar = btnModificar;
    }

    public String getFechaSistema() {
        fechaSistema = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //System.out.println("La fecha de hoy es:" + sdf.format(fechaSistema));         
        return sdf.format(fechaSistema);
    }

    public void setFechaSistema(Date fechaSistema) {
        this.fechaSistema = fechaSistema;
    }

    public Permiso getSelectedPermiso() {
        return selectedPermiso;
    }

    public void setSelectedPermiso(Permiso selectedPermiso) {
        this.selectedPermiso = selectedPermiso;
    }

    public List<Permiso> getListaPermisos() {
        if (listaPermisos == null) {
            try {
                fechaSistema = new Date();
                listaPermisos = permisosLogica.consultarPermisosDiario(getFechaSistema());
            } catch (Exception ex) {
                Logger.getLogger(ApruebaPermisoVista.class.getName()).log(Level.SEVERE, null, ex);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", ex.getMessage()));
            }
        }

        return listaPermisos;
    }

    public void setListaPermisos(List<Permiso> listaPermisos) {
        this.listaPermisos = listaPermisos;
    }

    public void onRowSelect(SelectEvent event) {
        //System.out.println("Listener Tabla");

        if (usuariosLogica.validarSesion()) {
            txtCodigo.setValue(((Permiso) event.getObject()).getCodigo());
            txtDocumento.setValue(((Permiso) event.getObject()).getDocumentoAprendiz().getDocumento().getDocumento());
            txtNombre.setValue(((Permiso) event.getObject()).getDocumentoAprendiz().getDocumento().getNombre() + " " + ((Permiso) event.getObject()).getDocumentoAprendiz().getDocumento().getApellido());
           
            btnModificar.setDisabled(false);
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }
    
    public void aprobar_permisos_coordinador() {
        //System.out.println("Aprobar Permiso por el Coordinador");

        if (usuariosLogica.validarSesion()) {
            try {

                Permiso permiso = new Permiso();
                permiso.setCodigo(Integer.parseInt(txtCodigo.getValue().toString()));
                String user = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuario");
                Coordinador coord = coordinadorLogica.consultarPorId(Long.parseLong(user));
                Permiso permisoActual = permisosLogica.consultarPorId(Integer.parseInt(txtCodigo.getValue().toString()));
                if (permisoActual.getDocumentoInstructor() != null) {
                    permiso.setEstado("APROBADO");
                } else {
                    permiso.setEstado("PENDIENTE");
                }
                if(permisoActual.getDocumentoCoordinador() != null){
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje: ", "El Permiso ya ha sido Aprobado por el Coordinador "+permisoActual.getDocumentoCoordinador().getDocumento().getNombre()+" "+permisoActual.getDocumentoCoordinador().getDocumento().getApellido()));
                }else{
                    permiso.setDocumentoCoordinador(coord);
                    permisosLogica.aprobarPermisoC(permiso);

                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje: ", "El Permiso se Aprobó con Éxito"));
                }

            } catch (Exception e) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", e.getMessage()));
            }

            listaPermisos = null;
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void aprobar_permisos_instructor() {
        //System.out.println("Aprobar Permiso por el Instructor");

        if (usuariosLogica.validarSesion()) {
            try {

                Permiso permiso = new Permiso();
                permiso.setCodigo(Integer.parseInt(txtCodigo.getValue().toString()));
                String user = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuario");
                //System.out.println("El usuario logeado es " + user);
                Instructor ins = instructorLogica.consultarPorId(Long.parseLong(user));
                Permiso permisoActual = permisosLogica.consultarPorId(Integer.parseInt(txtCodigo.getValue().toString()));
                if (permisoActual.getDocumentoCoordinador() != null) {
                    permiso.setEstado("APROBADO");
                } else {
                    permiso.setEstado("PENDIENTE");
                }
                if(permisoActual.getDocumentoInstructor() != null){
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje: ", "El Permiso ya ha sido Aprobado por el instructor "+permisoActual.getDocumentoInstructor().getDocumento().getNombre()+" "+permisoActual.getDocumentoInstructor().getDocumento().getApellido()));
                }else{
                    permiso.setDocumentoInstructor(ins);
                    permisosLogica.aprobarPermiso(permiso);

                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje: ", "El Permiso se Aprobó con Éxito"));
                }

            } catch (Exception e) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", e.getMessage()));
            }

            listaPermisos = null;
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void limpiar_action() {
        //System.out.println("Limpiar");

        if (usuariosLogica.validarSesion()) {
            txtCodigo.setValue("");
            txtDocumento.setValue("");
            txtNombre.setValue("");

            btnModificar.setDisabled(true);
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    /**
     * @return the listaPermisosIns
     */
    public List<Permiso> getListaPermisosIns() {
        if (listaPermisosIns == null) {
            try {
                String user = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuario");
                //System.out.println("El usuario logeado es " + user);
                Instructor ins = instructorLogica.consultarPorId(Long.parseLong(user));
                listaPermisosIns = permisosLogica.consultarPermisosDiarioIns(getFechaSistema(), ins);
                //System.out.println("Los permisos del instructor " + listaPermisosIns.size());
            } catch (Exception ex) {
                Logger.getLogger(ApruebaPermisoVista.class.getName()).log(Level.SEVERE, null, ex);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", ex.getMessage()));
            }
        }
        return listaPermisosIns;
    }

    /**
     * @param listaPermisosIns the listaPermisosIns to set
     */
    public void setListaPermisosIns(List<Permiso> listaPermisosIns) {
        this.listaPermisosIns = listaPermisosIns;
    }
}
